home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / Interfaces&Libraries / Universal / Interfaces / CIncludes / QD3DIO.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-17  |  23.8 KB  |  815 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        QD3DIO.h
  3.  
  4.      Contains:    QuickDraw 3D IO API                                                
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.5.4
  7.                  Release:    Universal Interfaces 3.2
  8.  
  9.      Copyright:    © 1995-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __QD3DIO__
  18. #define __QD3DIO__
  19.  
  20. #ifndef __QD3D__
  21. #include <QD3D.h>
  22. #endif
  23.  
  24. #ifndef __QD3DDRAWCONTEXT__
  25. #include <QD3DDrawContext.h>
  26. #endif
  27. #ifndef __QD3DVIEW__
  28. #include <QD3DView.h>
  29. #endif
  30.  
  31.  
  32.  
  33. #if PRAGMA_ONCE
  34. #pragma once
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. #if PRAGMA_IMPORT
  42. #pragma import on
  43. #endif
  44.  
  45. #if PRAGMA_STRUCT_ALIGN
  46.     #pragma options align=power
  47. #elif PRAGMA_STRUCT_PACKPUSH
  48.     #pragma pack(push, 2)
  49. #elif PRAGMA_STRUCT_PACK
  50.     #pragma pack(2)
  51. #endif
  52.  
  53. #if PRAGMA_ENUM_ALWAYSINT
  54.     #pragma enumsalwaysint on
  55. #elif PRAGMA_ENUM_OPTIONS
  56.     #pragma option enum=int
  57. #elif PRAGMA_ENUM_PACK
  58.     #if __option(pack_enums)
  59.         #define PRAGMA_ENUM_PACK__QD3DIO__
  60.     #endif
  61.     #pragma options(!pack_enums)
  62. #endif
  63.  
  64. /******************************************************************************
  65.  **                                                                              **
  66.  **                                    Basic Types                                 **                                                    
  67.  **                                                                              **
  68.  *****************************************************************************/
  69. typedef unsigned char                     TQ3Uns8;
  70. typedef signed char                     TQ3Int8;
  71. typedef unsigned short                     TQ3Uns16;
  72. typedef signed short                     TQ3Int16;
  73. typedef unsigned long                     TQ3Uns32;
  74. typedef signed long                     TQ3Int32;
  75. #if TARGET_RT_BIG_ENDIAN
  76.  
  77. struct TQ3Uns64 {
  78.     unsigned long                     hi;
  79.     unsigned long                     lo;
  80. };
  81. typedef struct TQ3Uns64                    TQ3Uns64;
  82.  
  83. struct TQ3Int64 {
  84.     signed long                     hi;
  85.     unsigned long                     lo;
  86. };
  87. typedef struct TQ3Int64                    TQ3Int64;
  88. #else
  89.  
  90. struct TQ3Uns64 {
  91.     unsigned long                     lo;
  92.     unsigned long                     hi;
  93. };
  94. typedef struct TQ3Uns64                    TQ3Uns64;
  95.  
  96. struct TQ3Int64 {
  97.     unsigned long                     lo;
  98.     signed long                     hi;
  99. };
  100. typedef struct TQ3Int64                    TQ3Int64;
  101. #endif  /* TARGET_RT_BIG_ENDIAN */
  102.  
  103.  
  104. typedef float                             TQ3Float32;
  105. typedef double                             TQ3Float64;
  106. typedef TQ3Uns32                         TQ3Size;
  107. /******************************************************************************
  108.  **                                                                              **
  109.  **                                    File Types                                 **
  110.  **                                                                              **
  111.  *****************************************************************************/
  112.  
  113. enum TQ3FileModeMasks {
  114.     kQ3FileModeNormal            = 0,
  115.     kQ3FileModeStream            = 1 << 0,
  116.     kQ3FileModeDatabase            = 1 << 1,
  117.     kQ3FileModeText                = 1 << 2
  118. };
  119. typedef enum TQ3FileModeMasks TQ3FileModeMasks;
  120.  
  121. typedef unsigned long                     TQ3FileMode;
  122. /******************************************************************************
  123.  **                                                                              **
  124.  **                                    Method Types                             **
  125.  **                                                                              **
  126.  *****************************************************************************/
  127. /*
  128.  *    IO Methods
  129.  *
  130.  *    The IO system treats all objects as groups of typed information.
  131.  *    When you register your element or attribute, the "elementType" is the 
  132.  *    binary type of your object, the "elementName" the ascii type.
  133.  *    
  134.  *    All objects in the metafile are made up of a "root" or parent object which
  135.  *    defines the instantiated object type. You may define the format of your 
  136.  *    data any way you wish as long as you use the primitives types above and the
  137.  *    routines below.
  138.  *
  139.  *    Root Objects are often appended with additional child objects, called 
  140.  *    subobjects. You may append your object with other QuickDraw 3D objects.
  141.  *    
  142.  *    Writing is straightforward: an object traverses itself any other objects 
  143.  *    that make it up, then writes its own data. Writing uses two methods: 
  144.  *    TQ3XObjectTraverseMethod and TQ3XObjectWriteMethod.
  145.  *
  146.  *    The TQ3XObjectTraverseMethod method should:
  147.  *    + First, Determine if the data should be written 
  148.  *        - if you don't want to write out your object after examining your
  149.  *            data, return kQ3Success in your Traverse method without calling
  150.  *            any other submit calls.
  151.  *     + Next, calculate the size of your object on disk
  152.  *     + Gather whatever state from the view you need to preserve
  153.  *         - you may access the view state NOW, as the state of the
  154.  *             view duing your TQ3XObjectWriteMethod will not be valid. You may
  155.  *             pass a temporary buffer to your write method.
  156.  *     + Submit your view write data using Q3View_SubmitWriteData
  157.  *         - note that you MUST call this before any other "_Submit" call.
  158.  *         - you may pass in a "deleteMethod" for your data. This method
  159.  *             will be called whether or not your write method succeeds or fails.
  160.  *     + Submit your subobjects to the view
  161.  *     
  162.  *     The TQ3XObjectWriteMethod method should:
  163.  *     + Write your data format to the file using the primitives routines below.
  164.  *         - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that
  165.  *             method will be called upon exit of your write method.
  166.  *
  167.  *    Reading is less straightforward because your root object and
  168.  *    any subobjects must be read inside of your TQ3XObjectReadDataMethod. There 
  169.  *    is an implicit state contained in the file while reading, which you must 
  170.  *    be aware of. When you first enter the read method, you must physically 
  171.  *    read in your data format using the primitives routines until
  172.  *    
  173.  *    Q3File_IsEndOfData(file) == kQ3True
  174.  *    
  175.  *    Generally, your data format should be self-descriptive such that you do not
  176.  *    need to call Q3File_IsEndOfData to determine if you are done reading. 
  177.  *    However, this call is useful for determining zero-sized object or 
  178.  *    determining the end of an object's data.
  179.  *    
  180.  *    Once you have read in all the data, you may collect subobjects. A metafile
  181.  *    object ONLY has subobjects if it is in a container. The call
  182.  *    
  183.  *    Q3File_IsEndOfContainer(file)
  184.  *    
  185.  *    returns kQ3False if subobjects exist, and kQ3True if subobjects do not 
  186.  *    exist.
  187.  *    
  188.  *    At this point, you may use
  189.  *    
  190.  *    Q3File_GetNextObjectType
  191.  *    Q3File_IsNextObjectOfType
  192.  *    Q3File_ReadObject
  193.  *    Q3File_SkipObject
  194.  *    
  195.  *    to iterate through the subobjects until Q3File_IsEndOfContainer(file) 
  196.  *    is kQ3True.
  197.  * 
  198.  */
  199.  
  200. /*
  201.  * IO Methods
  202.  */
  203.  
  204. enum {
  205.     kQ3XMethodTypeObjectFileVersion = FOUR_CHAR_CODE('vers'),    /* version */
  206.     kQ3XMethodTypeObjectTraverse = FOUR_CHAR_CODE('trvs'),        /* byte count */
  207.     kQ3XMethodTypeObjectTraverseData = FOUR_CHAR_CODE('trvd'),    /* byte count */
  208.     kQ3XMethodTypeObjectWrite    = FOUR_CHAR_CODE('writ'),        /* Dump info to file */
  209.     kQ3XMethodTypeObjectReadData = FOUR_CHAR_CODE('rddt'),        /* Read info from file into buffer or, attach read data to parent */
  210.     kQ3XMethodTypeObjectRead    = FOUR_CHAR_CODE('read'),
  211.     kQ3XMethodTypeObjectAttach    = FOUR_CHAR_CODE('attc')
  212. };
  213.  
  214. /*
  215.  *    TQ3XObjectTraverseMethod
  216.  *
  217.  *    For "elements" (meaning "attributes, too), you will be passed NULL for 
  218.  *    object. Sorry, custom objects will be available in the next major revision.
  219.  *
  220.  *    The "data" is a pointer to your internal element data.
  221.  *
  222.  *    The view is the current traversal view.
  223.  */
  224. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  225. /*
  226.  *  TQ3XObjectTraverseDataMethod
  227.  */
  228. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectTraverseDataMethod )(TQ3Object object, void *data, TQ3ViewObject view);
  229. /*
  230.  *  TQ3XObjectWriteMethod
  231.  */
  232. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectWriteMethod )(const void *object, TQ3FileObject theFile);
  233. /*
  234.  *  Custom object writing 
  235.  */
  236. typedef CALLBACK_API_C( void , TQ3XDataDeleteMethod )(void *data);
  237. EXTERN_API_C( TQ3Status )
  238. Q3XView_SubmitWriteData            (TQ3ViewObject             view,
  239.                                  TQ3Size                 size,
  240.                                  void *                    data,
  241.                                  TQ3XDataDeleteMethod     deleteData);
  242.  
  243. EXTERN_API_C( TQ3Status )
  244. Q3XView_SubmitSubObjectData        (TQ3ViewObject             view,
  245.                                  TQ3XObjectClass         objectClass,
  246.                                  unsigned long             size,
  247.                                  void *                    data,
  248.                                  TQ3XDataDeleteMethod     deleteData);
  249.  
  250. /*
  251.  *  TQ3XObjectReadMethod
  252.  */
  253. typedef CALLBACK_API_C( TQ3Object , TQ3XObjectReadMethod )(TQ3FileObject theFile);
  254. /*
  255.  *    TQ3XObjectReadDataMethod
  256.  *
  257.  *  For "elements" (meaning "attributes", too), you must allocate stack space 
  258.  *    and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
  259.  *
  260.  *    Otherwise, parentObject is whatever object your element is a subobject of...
  261.  */
  262. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectReadDataMethod )(TQ3Object parentObject, TQ3FileObject theFile);
  263. /*
  264.  *  TQ3XObjectAttachMethod
  265.  */
  266. typedef CALLBACK_API_C( TQ3Status , TQ3XObjectAttachMethod )(TQ3Object childObject, TQ3Object parentObject);
  267.  
  268.  
  269. /******************************************************************************
  270.  **                                                                              **
  271.  **                                Versioning                                     **
  272.  **                                                                              **
  273.  *****************************************************************************/
  274.  
  275. #define Q3FileVersion(majorVersion, minorVersion)    (TQ3FileVersion) \
  276.     ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) | ((TQ3Uns32) minorVersion & 0xFFFF))
  277.  
  278. typedef unsigned long                     TQ3FileVersion;
  279. #define kQ3FileVersionCurrent    Q3FileVersion(1,5)
  280.  
  281. /******************************************************************************
  282.  **                                                                              **
  283.  **                                File Routines                                 **
  284.  **                                                                              **
  285.  *****************************************************************************/
  286. /*
  287.  * Creation and accessors
  288.  */
  289. EXTERN_API_C( TQ3FileObject )
  290. Q3File_New                        (void);
  291.  
  292. EXTERN_API_C( TQ3Status )
  293. Q3File_GetStorage                (TQ3FileObject             theFile,
  294.                                  TQ3StorageObject *        storage);
  295.  
  296. EXTERN_API_C( TQ3Status )
  297. Q3File_SetStorage                (TQ3FileObject             theFile,
  298.                                  TQ3StorageObject         storage);
  299.  
  300. /*
  301.  * Opening, and accessing "open" state, closing/cancelling
  302.  */
  303. EXTERN_API_C( TQ3Status )
  304. Q3File_OpenRead                    (TQ3FileObject             theFile,
  305.                                  TQ3FileMode *            mode);
  306.  
  307. EXTERN_API_C( TQ3Status )
  308. Q3File_OpenWrite                (TQ3FileObject             theFile,
  309.                                  TQ3FileMode             mode);
  310.  
  311. EXTERN_API_C( TQ3Status )
  312. Q3File_IsOpen                    (TQ3FileObject             theFile,
  313.                                  TQ3Boolean *            isOpen);
  314.  
  315. EXTERN_API_C( TQ3Status )
  316. Q3File_GetMode                    (TQ3FileObject             theFile,
  317.                                  TQ3FileMode *            mode);
  318.  
  319. EXTERN_API_C( TQ3Status )
  320. Q3File_GetVersion                (TQ3FileObject             theFile,
  321.                                  TQ3FileVersion *        version);
  322.  
  323. EXTERN_API_C( TQ3Status )
  324. Q3File_Close                    (TQ3FileObject             theFile);
  325.  
  326. EXTERN_API_C( TQ3Status )
  327. Q3File_Cancel                    (TQ3FileObject             theFile);
  328.  
  329. /*
  330.  * Writing (Application)
  331.  */
  332. EXTERN_API_C( TQ3Status )
  333. Q3View_StartWriting                (TQ3ViewObject             view,
  334.                                  TQ3FileObject             theFile);
  335.  
  336. EXTERN_API_C( TQ3ViewStatus )
  337. Q3View_EndWriting                (TQ3ViewObject             view);
  338.  
  339. /*
  340.  * Reading (Application)
  341.  */
  342. EXTERN_API_C( TQ3ObjectType )
  343. Q3File_GetNextObjectType        (TQ3FileObject             theFile);
  344.  
  345. EXTERN_API_C( TQ3Boolean )
  346. Q3File_IsNextObjectOfType        (TQ3FileObject             theFile,
  347.                                  TQ3ObjectType             ofType);
  348.  
  349. EXTERN_API_C( TQ3Object )
  350. Q3File_ReadObject                (TQ3FileObject             theFile);
  351.  
  352. EXTERN_API_C( TQ3Status )
  353. Q3File_SkipObject                (TQ3FileObject             theFile);
  354.  
  355. EXTERN_API_C( TQ3Boolean )
  356. Q3File_IsEndOfData                (TQ3FileObject             theFile);
  357.  
  358. EXTERN_API_C( TQ3Boolean )
  359. Q3File_IsEndOfContainer            (TQ3FileObject             theFile,
  360.                                  TQ3Object                 rootObject);
  361.  
  362. EXTERN_API_C( TQ3Boolean )
  363. Q3File_IsEndOfFile                (TQ3FileObject             theFile);
  364.  
  365. /*    
  366.  *  External file references
  367.  */
  368. EXTERN_API_C( TQ3Status )
  369. Q3File_MarkAsExternalReference    (TQ3FileObject             theFile,
  370.                                  TQ3SharedObject         sharedObject);
  371.  
  372. EXTERN_API_C( TQ3GroupObject )
  373. Q3File_GetExternalReferences    (TQ3FileObject             theFile);
  374.  
  375. /*    
  376.  *  Tracking editing in read-in objects with custom elements
  377.  */
  378. EXTERN_API_C( TQ3Status )
  379. Q3Shared_ClearEditTracking        (TQ3SharedObject         sharedObject);
  380.  
  381. EXTERN_API_C( TQ3Boolean )
  382. Q3Shared_GetEditTrackingState    (TQ3SharedObject         sharedObject);
  383.  
  384. /*    
  385.  *  Reading objects inside a group one-by-one
  386.  */
  387.  
  388. enum TQ3FileReadGroupStateMasks {
  389.     kQ3FileReadWholeGroup        = 0,
  390.     kQ3FileReadObjectsInGroup    = 1 << 0,
  391.     kQ3FileCurrentlyInsideGroup    = 1 << 1
  392. };
  393. typedef enum TQ3FileReadGroupStateMasks TQ3FileReadGroupStateMasks;
  394.  
  395. typedef unsigned long                     TQ3FileReadGroupState;
  396. EXTERN_API_C( TQ3Status )
  397. Q3File_SetReadInGroup            (TQ3FileObject             theFile,
  398.                                  TQ3FileReadGroupState     readGroupState);
  399.  
  400. EXTERN_API_C( TQ3Status )
  401. Q3File_GetReadInGroup            (TQ3FileObject             theFile,
  402.                                  TQ3FileReadGroupState * readGroupState);
  403.  
  404.  
  405. /*
  406.  * Idling
  407.  */
  408. typedef CALLBACK_API_C( TQ3Status , TQ3FileIdleMethod )(TQ3FileObject theFile, const void *idlerData);
  409. EXTERN_API_C( TQ3Status )
  410. Q3File_SetIdleMethod            (TQ3FileObject             theFile,
  411.                                  TQ3FileIdleMethod         idle,
  412.                                  const void *            idleData);
  413.  
  414.  
  415. /******************************************************************************
  416.  **                                                                              **
  417.  **                                Primitives Routines                             **
  418.  **                                                                              **
  419.  *****************************************************************************/
  420. EXTERN_API_C( TQ3Status )
  421. Q3NewLine_Write                    (TQ3FileObject             theFile);
  422.  
  423. EXTERN_API_C( TQ3Status )
  424. Q3Uns8_Read                        (TQ3Uns8 *                data,
  425.                                  TQ3FileObject             theFile);
  426.  
  427. EXTERN_API_C( TQ3Status )
  428. Q3Uns8_Write                    (TQ3Uns8                 data,
  429.                                  TQ3FileObject             theFile);
  430.  
  431. EXTERN_API_C( TQ3Status )
  432. Q3Uns16_Read                    (TQ3Uns16 *                data,
  433.                                  TQ3FileObject             theFile);
  434.  
  435. EXTERN_API_C( TQ3Status )
  436. Q3Uns16_Write                    (TQ3Uns16                 data,
  437.                                  TQ3FileObject             theFile);
  438.  
  439. EXTERN_API_C( TQ3Status )
  440. Q3Uns32_Read                    (TQ3Uns32 *                data,
  441.                                  TQ3FileObject             theFile);
  442.  
  443. EXTERN_API_C( TQ3Status )
  444. Q3Uns32_Write                    (TQ3Uns32                 data,
  445.                                  TQ3FileObject             theFile);
  446.  
  447. EXTERN_API_C( TQ3Status )
  448. Q3Int8_Read                        (TQ3Int8 *                data,
  449.                                  TQ3FileObject             theFile);
  450.  
  451. EXTERN_API_C( TQ3Status )
  452. Q3Int8_Write                    (TQ3Int8                 data,
  453.                                  TQ3FileObject             theFile);
  454.  
  455. EXTERN_API_C( TQ3Status )
  456. Q3Int16_Read                    (TQ3Int16 *                data,
  457.                                  TQ3FileObject             theFile);
  458.  
  459. EXTERN_API_C( TQ3Status )
  460. Q3Int16_Write                    (TQ3Int16                 data,
  461.                                  TQ3FileObject             theFile);
  462.  
  463. EXTERN_API_C( TQ3Status )
  464. Q3Int32_Read                    (TQ3Int32 *                data,
  465.                                  TQ3FileObject             theFile);
  466.  
  467. EXTERN_API_C( TQ3Status )
  468. Q3Int32_Write                    (TQ3Int32                 data,
  469.                                  TQ3FileObject             theFile);
  470.  
  471. EXTERN_API_C( TQ3Status )
  472. Q3Uns64_Read                    (TQ3Uns64 *                data,
  473.                                  TQ3FileObject             theFile);
  474.  
  475. EXTERN_API_C( TQ3Status )
  476. Q3Uns64_Write                    (TQ3Uns64                 data,
  477.                                  TQ3FileObject             theFile);
  478.  
  479. EXTERN_API_C( TQ3Status )
  480. Q3Int64_Read                    (TQ3Int64 *                data,
  481.                                  TQ3FileObject             theFile);
  482.  
  483. EXTERN_API_C( TQ3Status )
  484. Q3Int64_Write                    (TQ3Int64                 data,
  485.                                  TQ3FileObject             theFile);
  486.  
  487. EXTERN_API_C( TQ3Status )
  488. Q3Float32_Read                    (TQ3Float32 *            data,
  489.                                  TQ3FileObject             theFile);
  490.  
  491. EXTERN_API_C( TQ3Status )
  492. Q3Float32_Write                    (TQ3Float32             data,
  493.                                  TQ3FileObject             theFile);
  494.  
  495. EXTERN_API_C( TQ3Status )
  496. Q3Float64_Read                    (TQ3Float64 *            data,
  497.                                  TQ3FileObject             theFile);
  498.  
  499. EXTERN_API_C( TQ3Status )
  500. Q3Float64_Write                    (TQ3Float64             data,
  501.                                  TQ3FileObject             theFile);
  502.  
  503. EXTERN_API_C( TQ3Size )
  504. Q3Size_Pad                        (TQ3Size                 size);
  505.  
  506. /*
  507.  * Pass a pointer to a buffer of kQ3StringMaximumLength bytes
  508.  */
  509. EXTERN_API_C( TQ3Status )
  510. Q3String_Read                    (char *                    data,
  511.                                  unsigned long *        length,
  512.                                  TQ3FileObject             theFile);
  513.  
  514. EXTERN_API_C( TQ3Status )
  515. Q3String_Write                    (const char *            data,
  516.                                  TQ3FileObject             theFile);
  517.  
  518. /* 
  519.  * This call will read Q3Size_Pad(size) bytes,
  520.  *    but only place size bytes into data.
  521.  */
  522. EXTERN_API_C( TQ3Status )
  523. Q3RawData_Read                    (unsigned char *        data,
  524.                                  unsigned long             size,
  525.                                  TQ3FileObject             theFile);
  526.  
  527. /* 
  528.  * This call will write Q3Size_Pad(size) bytes,
  529.  *    adding 0's to pad to the nearest 4 byte boundary.
  530.  */
  531. EXTERN_API_C( TQ3Status )
  532. Q3RawData_Write                    (const unsigned char *    data,
  533.                                  unsigned long             size,
  534.                                  TQ3FileObject             theFile);
  535.  
  536. /******************************************************************************
  537.  **                                                                              **
  538.  **                        Convenient Primitives Routines                         **
  539.  **                                                                              **
  540.  *****************************************************************************/
  541. EXTERN_API_C( TQ3Status )
  542. Q3Point2D_Read                    (TQ3Point2D *            point2D,
  543.                                  TQ3FileObject             theFile);
  544.  
  545. EXTERN_API_C( TQ3Status )
  546. Q3Point2D_Write                    (const TQ3Point2D *        point2D,
  547.                                  TQ3FileObject             theFile);
  548.  
  549. EXTERN_API_C( TQ3Status )
  550. Q3Point3D_Read                    (TQ3Point3D *            point3D,
  551.                                  TQ3FileObject             theFile);
  552.  
  553. EXTERN_API_C( TQ3Status )
  554. Q3Point3D_Write                    (const TQ3Point3D *        point3D,
  555.                                  TQ3FileObject             theFile);
  556.  
  557. EXTERN_API_C( TQ3Status )
  558. Q3RationalPoint3D_Read            (TQ3RationalPoint3D *    point3D,
  559.                                  TQ3FileObject             theFile);
  560.  
  561. EXTERN_API_C( TQ3Status )
  562. Q3RationalPoint3D_Write            (const TQ3RationalPoint3D * point3D,
  563.                                  TQ3FileObject             theFile);
  564.  
  565. EXTERN_API_C( TQ3Status )
  566. Q3RationalPoint4D_Read            (TQ3RationalPoint4D *    point4D,
  567.                                  TQ3FileObject             theFile);
  568.  
  569. EXTERN_API_C( TQ3Status )
  570. Q3RationalPoint4D_Write            (const TQ3RationalPoint4D * point4D,
  571.                                  TQ3FileObject             theFile);
  572.  
  573. EXTERN_API_C( TQ3Status )
  574. Q3Vector2D_Read                    (TQ3Vector2D *            vector2D,
  575.                                  TQ3FileObject             theFile);
  576.  
  577. EXTERN_API_C( TQ3Status )
  578. Q3Vector2D_Write                (const TQ3Vector2D *    vector2D,
  579.                                  TQ3FileObject             theFile);
  580.  
  581. EXTERN_API_C( TQ3Status )
  582. Q3Vector3D_Read                    (TQ3Vector3D *            vector3D,
  583.                                  TQ3FileObject             theFile);
  584.  
  585. EXTERN_API_C( TQ3Status )
  586. Q3Vector3D_Write                (const TQ3Vector3D *    vector3D,
  587.                                  TQ3FileObject             theFile);
  588.  
  589. EXTERN_API_C( TQ3Status )
  590. Q3Matrix4x4_Read                (TQ3Matrix4x4 *            matrix4x4,
  591.                                  TQ3FileObject             theFile);
  592.  
  593. EXTERN_API_C( TQ3Status )
  594. Q3Matrix4x4_Write                (const TQ3Matrix4x4 *    matrix4x4,
  595.                                  TQ3FileObject             theFile);
  596.  
  597. EXTERN_API_C( TQ3Status )
  598. Q3Tangent2D_Read                (TQ3Tangent2D *            tangent2D,
  599.                                  TQ3FileObject             theFile);
  600.  
  601. EXTERN_API_C( TQ3Status )
  602. Q3Tangent2D_Write                (const TQ3Tangent2D *    tangent2D,
  603.                                  TQ3FileObject             theFile);
  604.  
  605. EXTERN_API_C( TQ3Status )
  606. Q3Tangent3D_Read                (TQ3Tangent3D *            tangent3D,
  607.                                  TQ3FileObject             theFile);
  608.  
  609. EXTERN_API_C( TQ3Status )
  610. Q3Tangent3D_Write                (const TQ3Tangent3D *    tangent3D,
  611.                                  TQ3FileObject             theFile);
  612.  
  613. /*    This call affects only text Files - it is a no-op in binary files */
  614. EXTERN_API_C( TQ3Status )
  615. Q3Comment_Write                    (char *                    comment,
  616.                                  TQ3FileObject             theFile);
  617.  
  618. /******************************************************************************
  619.  **                                                                              **
  620.  **                                Unknown Object                                 **
  621.  **                                                                              **
  622.  **        Unknown objects are generated when reading files which contain         **
  623.  **        custom data which has not been registered in the current             **
  624.  **        instantiation of QuickDraw 3D.                                         **
  625.  **                                                                              **
  626.  *****************************************************************************/
  627. EXTERN_API_C( TQ3ObjectType )
  628. Q3Unknown_GetType                (TQ3UnknownObject         unknownObject);
  629.  
  630. EXTERN_API_C( TQ3Status )
  631. Q3Unknown_GetDirtyState            (TQ3UnknownObject         unknownObject,
  632.                                  TQ3Boolean *            isDirty);
  633.  
  634. EXTERN_API_C( TQ3Status )
  635. Q3Unknown_SetDirtyState            (TQ3UnknownObject         unknownObject,
  636.                                  TQ3Boolean             isDirty);
  637.  
  638.  
  639. /******************************************************************************
  640.  **                                                                              **
  641.  **                            Unknown Text Routines                             **
  642.  **                                                                              **
  643.  *****************************************************************************/
  644.  
  645. struct TQ3UnknownTextData {
  646.     char *                            objectName;                    /* '\0' terminated */
  647.     char *                            contents;                    /* '\0' terminated */
  648. };
  649. typedef struct TQ3UnknownTextData        TQ3UnknownTextData;
  650. EXTERN_API_C( TQ3Status )
  651. Q3UnknownText_GetData            (TQ3UnknownObject         unknownObject,
  652.                                  TQ3UnknownTextData *    unknownTextData);
  653.  
  654. EXTERN_API_C( TQ3Status )
  655. Q3UnknownText_EmptyData            (TQ3UnknownTextData *    unknownTextData);
  656.  
  657.  
  658. /******************************************************************************
  659.  **                                                                              **
  660.  **                            Unknown Binary Routines                             **
  661.  **                                                                              **
  662.  *****************************************************************************/
  663.  
  664. struct TQ3UnknownBinaryData {
  665.     TQ3ObjectType                     objectType;
  666.     unsigned long                     size;
  667.     TQ3Endian                         byteOrder;
  668.     char *                            contents;
  669. };
  670. typedef struct TQ3UnknownBinaryData        TQ3UnknownBinaryData;
  671. EXTERN_API_C( TQ3Status )
  672. Q3UnknownBinary_GetData            (TQ3UnknownObject         unknownObject,
  673.                                  TQ3UnknownBinaryData *    unknownBinaryData);
  674.  
  675. EXTERN_API_C( TQ3Status )
  676. Q3UnknownBinary_EmptyData        (TQ3UnknownBinaryData *    unknownBinaryData);
  677.  
  678.  
  679. EXTERN_API_C( TQ3Status )
  680. Q3UnknownBinary_GetTypeString    (TQ3UnknownObject         unknownObject,
  681.                                  char **                typeString);
  682.  
  683. EXTERN_API_C( TQ3Status )
  684. Q3UnknownBinary_EmptyTypeString    (char **                typeString);
  685.  
  686. /******************************************************************************
  687.  **                                                                              **
  688.  **                            ViewHints routines                                 **
  689.  **                                                                              **
  690.  **        ViewHints are an object in a metafile to give you some hints on how     **
  691.  **        to render a scene.    You may create a view with any of the objects     **
  692.  **        retrieved from it, or you can just throw it away.                     **
  693.  **                                                                              **
  694.  **        To write a view hints to a file, create a view hints object from a     **
  695.  **        view and write the view hints.                                         **
  696.  **                                                                              **
  697.  *****************************************************************************/
  698. EXTERN_API_C( TQ3ViewHintsObject )
  699. Q3ViewHints_New                    (TQ3ViewObject             view);
  700.  
  701. EXTERN_API_C( TQ3Status )
  702. Q3ViewHints_SetRenderer            (TQ3ViewHintsObject     viewHints,
  703.                                  TQ3RendererObject         renderer);
  704.  
  705. EXTERN_API_C( TQ3Status )
  706. Q3ViewHints_GetRenderer            (TQ3ViewHintsObject     viewHints,
  707.                                  TQ3RendererObject *    renderer);
  708.  
  709. EXTERN_API_C( TQ3Status )
  710. Q3ViewHints_SetCamera            (TQ3ViewHintsObject     viewHints,
  711.                                  TQ3CameraObject         camera);
  712.  
  713. EXTERN_API_C( TQ3Status )
  714. Q3ViewHints_GetCamera            (TQ3ViewHintsObject     viewHints,
  715.                                  TQ3CameraObject *        camera);
  716.  
  717. EXTERN_API_C( TQ3Status )
  718. Q3ViewHints_SetLightGroup        (TQ3ViewHintsObject     viewHints,
  719.                                  TQ3GroupObject         lightGroup);
  720.  
  721. EXTERN_API_C( TQ3Status )
  722. Q3ViewHints_GetLightGroup        (TQ3ViewHintsObject     viewHints,
  723.                                  TQ3GroupObject *        lightGroup);
  724.  
  725. EXTERN_API_C( TQ3Status )
  726. Q3ViewHints_SetAttributeSet        (TQ3ViewHintsObject     viewHints,
  727.                                  TQ3AttributeSet         attributeSet);
  728.  
  729. EXTERN_API_C( TQ3Status )
  730. Q3ViewHints_GetAttributeSet        (TQ3ViewHintsObject     viewHints,
  731.                                  TQ3AttributeSet *        attributeSet);
  732.  
  733. EXTERN_API_C( TQ3Status )
  734. Q3ViewHints_SetDimensionsState    (TQ3ViewHintsObject     viewHints,
  735.                                  TQ3Boolean             isValid);
  736.  
  737. EXTERN_API_C( TQ3Status )
  738. Q3ViewHints_GetDimensionsState    (TQ3ViewHintsObject     viewHints,
  739.                                  TQ3Boolean *            isValid);
  740.  
  741. EXTERN_API_C( TQ3Status )
  742. Q3ViewHints_SetDimensions        (TQ3ViewHintsObject     viewHints,
  743.                                  unsigned long             width,
  744.                                  unsigned long             height);
  745.  
  746. EXTERN_API_C( TQ3Status )
  747. Q3ViewHints_GetDimensions        (TQ3ViewHintsObject     viewHints,
  748.                                  unsigned long *        width,
  749.                                  unsigned long *        height);
  750.  
  751. EXTERN_API_C( TQ3Status )
  752. Q3ViewHints_SetMaskState        (TQ3ViewHintsObject     viewHints,
  753.                                  TQ3Boolean             isValid);
  754.  
  755. EXTERN_API_C( TQ3Status )
  756. Q3ViewHints_GetMaskState        (TQ3ViewHintsObject     viewHints,
  757.                                  TQ3Boolean *            isValid);
  758.  
  759. EXTERN_API_C( TQ3Status )
  760. Q3ViewHints_SetMask                (TQ3ViewHintsObject     viewHints,
  761.                                  const TQ3Bitmap *        mask);
  762.  
  763. EXTERN_API_C( TQ3Status )
  764. Q3ViewHints_GetMask                (TQ3ViewHintsObject     viewHints,
  765.                                  TQ3Bitmap *            mask);
  766.  
  767. /* Call Q3Bitmap_Empty when done with the mask    */
  768. EXTERN_API_C( TQ3Status )
  769. Q3ViewHints_SetClearImageMethod    (TQ3ViewHintsObject     viewHints,
  770.                                  TQ3DrawContextClearImageMethod  clearMethod);
  771.  
  772. EXTERN_API_C( TQ3Status )
  773. Q3ViewHints_GetClearImageMethod    (TQ3ViewHintsObject     viewHints,
  774.                                  TQ3DrawContextClearImageMethod * clearMethod);
  775.  
  776. EXTERN_API_C( TQ3Status )
  777. Q3ViewHints_SetClearImageColor    (TQ3ViewHintsObject     viewHints,
  778.                                  const TQ3ColorARGB *    color);
  779.  
  780. EXTERN_API_C( TQ3Status )
  781. Q3ViewHints_GetClearImageColor    (TQ3ViewHintsObject     viewHints,
  782.                                  TQ3ColorARGB *            color);
  783.  
  784.  
  785.  
  786.  
  787. #if PRAGMA_ENUM_ALWAYSINT
  788.     #pragma enumsalwaysint reset
  789. #elif PRAGMA_ENUM_OPTIONS
  790.     #pragma option enum=reset
  791. #elif defined(PRAGMA_ENUM_PACK__QD3DIO__)
  792.     #pragma options(pack_enums)
  793. #endif
  794.  
  795. #if PRAGMA_STRUCT_ALIGN
  796.     #pragma options align=reset
  797. #elif PRAGMA_STRUCT_PACKPUSH
  798.     #pragma pack(pop)
  799. #elif PRAGMA_STRUCT_PACK
  800.     #pragma pack()
  801. #endif
  802.  
  803. #ifdef PRAGMA_IMPORT_OFF
  804. #pragma import off
  805. #elif PRAGMA_IMPORT
  806. #pragma import reset
  807. #endif
  808.  
  809. #ifdef __cplusplus
  810. }
  811. #endif
  812.  
  813. #endif /* __QD3DIO__ */
  814.  
  815.